import { DD_SYSTEM } from '@/constants/api-pre';
import { request } from '@/service/request';

/** 机构对象实体 */
export type Org = Api.Common.CommonRecord<{
  /** 机构ID */
  orgId: string;
  /** 机构名称 */
  orgName: string;
  /** 机构编码 */
  orgCode: string;
  /** 父机构ID */
  parentId: string;
  /** 父节点路径 */
  parentIds: string;
  /** 联系人邮箱 */
  email: string | null;
  /** 联系人地址 */
  address: string | null;
  /** 联系人电话 */
  phone: string;
  /** 联系人 */
  linkMan: string;
  /** 申请状态 */
  applyStatus: string;
  /** 地区名称 */
  region: string;
  /** 地区编码 */
  regionCode: string;
  /** 机构logo */
  orgImg: string;
  /** 社会信用代码 */
  socialCode: string;
  /** 行政区划代码-省 */
  province: string;
  /** 行政区划代码-市/区 */
  city: string;
  /** 行政区划代码-县/区 */
  county: string;
  /** 助产标识0否1是 */
  deliverMark: string;
  /** 监管标识0否1是 */
  superviseMark: string;
  /** 救治中心标识0否1是 */
  cureMark: string;
  /** 档案关联标识0否1是 */
  archivesMark: string;
  /** 机构类型（0—卫健委；1—公立医院；2—私立医院；3—医联体；4—集团医院；5—第三方影像中心；99—其他 */
  orgClass: string;
  /** 机构等级（1—一级；2—二级；3—3级 */
  orgLevel: string;
  /** 排序 */
  orderNum: string;
}>;

export type OrgList = Api.Common.PaginatingQueryRecord<Org>;

/** 机构查询参数 */
export type OrgSearchParams = CommonType.RecordNullable<Pick<Org, 'orgName' | 'status'> & Api.Common.CommonSearchParams>;

export type OrgEditAndCreateParams = CommonType.RecordNullable<
  Pick<Org, 'orgName' | 'orgCode' | 'parentId' | 'email' | 'address' | 'phone' | 'linkMan' | 'applyStatus' | 'region' | 'regionCode' | 'orgImg' | 'socialCode' | 'province' | 'city' | 'county' | 'deliverMark' | 'superviseMark' | 'cureMark' | 'archivesMark' | 'orgClass' | 'linkMan'
  | 'orgLevel' | 'orderNum'>
>;

/** 获取机构表单 URL */
export function getFetchOrgUrl(id: number) {
  return `${DD_SYSTEM}/org/${id}/form`;
}

/** 获取机构树 */
export function fetchGetOrgList(params?: OrgSearchParams) {
  return request<OrgList>({
    url: `${DD_SYSTEM}/org/list`,
    method: 'get',
    params
  });
}

/**
 * 获取机构树下拉选项
 *
 * @returns
 */
export function fetchAllOrgOptions() {
  return request<Api.Common.TreeOptions[]>({
    url: `${DD_SYSTEM}/org/options`,
    method: 'get'
  });
}

/**
 * 新增机构
 *
 * @param data
 */
export function createOrg(data: OrgEditAndCreateParams) {
  return request<boolean>({
    url: `${DD_SYSTEM}/org`,
    method: 'post',
    data
  });
}

/**
 * 编辑机构
 *
 * @param id
 * @param data
 */
export function updateOrg(id: number, data?: OrgEditAndCreateParams) {
  return request<boolean>({
    url: `${DD_SYSTEM}/org/${id}`,
    method: 'put',
    data
  });
}

/**
 * 删除机构
 *
 * @param ids
 */
export function deleteOrgs(ids: string) {
  return request<boolean>({
    url: `${DD_SYSTEM}/org/${ids}`,
    method: 'delete'
  });
}
